³ÛÛÛ ³ÛÛ ÛÛ ³ÛÛ ³ÛÛ ³ÛÛÛÛÛÛÛÛ ³ÛÛÛÛÛÛÛÛ ³ÛÛÛÛÛÛÛÛ ³ÛÛ ³ÛÛ À¿ß²²Ü ³²² ܲ² À¿²² ³²² ÀÄÄÄÄÄÄÄÄ ÀÄÄÄÄÄÄÄÄ ÀÄÄÄÄÄÄÄÄ ³²² ³²² À¿ß±±Ü ³±±±±±ß À¿±±±± ³±± ³±±±±±±±± ³±± ³±±±±±±±± À ÜÜÝ ÀÄÄ¿ßÜÜ ÀÄÄÄ ³ßß ³ÜÜ ÄÄÄÄÄ ³ßß ÀÄÄÄÄÄÄÄÄ ÜÜÜܲ²² ÀÄ¿²² ²² ³²² ³²²ÜÜÜÜÜÜ ³²²ÜÜÜÜÜÜ ³²² ³²² ³ßßßßß - ³ßß ³ßß ³ßß ³ßßßßßßßß ³ßßßßßßßß ³ßß ³ßß ÀÄÄÄÄÄ ÀÄÄ ÀÄÄ ÀÄÄ ÀÄÄÄÄÄÄÄÄ ÀÄÄÄÄÄÄÄÄ ÀÄÄ ÀÄÄ ³ÛÛÛÛÛÛÛÛ ³ÛÛÛÛÛÛÜ ³ÛÛÛÛÛÛÛÛ ÛÛ ÛÛ ³ÛÛÛÛÛÛÜ ³²² ÀÄÄÄÄ¿²²² ÀÄÄÄÄÄÄÄÄ ³²² ³²² ÀÄÄÄÄ¿²²² ³±± ³±±±±±±Ü ³±± ±± ³±± ³±± ²²²²²²ß ³ßß ³ßß ÀÄÄÄ¿ßÜÜ ³ßß ßß ³ÜÜÜ ³ÜÜ ³ÜÜ ÄÄ ³²²ÜÜÜܲ² À¿²² ³²²ÜÜÜܲ² ³ß²²²²²² ³²² ³ßßßßßßßß ³ßß ³ßßßßßßßß ÀÄ¿ ßßßß ³ßß ÀÄÄÄÄÄÄÄÄ ÀÄÄ ÀÄÄÄÄÄÄÄÄ ÀÄÄÄÄÄ ÀÄÄ ú úú---ÄÄÄ==ðð Presents ðð==ÄÄ----úú ú 3DEngine Current Version : v1.0 3D Graphic Engine For The SkyTecH GrOuP By The Unknown One 14/08/96 -- 01/10/96 Index Introduction Introduction … 3DEngine Structure POO Description de la structure POO Fichiers Description des fichiers 3DT Les calculs vectoriels Description des m‚thodes de calcul 3D La 3D Algorythmes et m‚thodes de developpement 3D Animation Description des m‚thodes d'animation 3D Tout le texte suivant se rapporte … 3DEngine v1.0. Pour les autres versions, le num‚ro de version est pr‚cis‚ avant le texte. Introduction ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 3DEngine a pour but de devenir LE moteur graphique 3D de SkyTecH, et ce pour tous les d‚veloppements … venir (d‚mos, jeux, programmes ou autres). 3DEngine doit pour cela ˆtre dot‚ d'une gestion … la fois simple, puissante, et facile … int‚grer dans un projet, quelqu'en soit la nature. De plus, le code doit pouvoir ˆtre maintenu … jour par tous les programmeurs du SkyTecH GrOuP le plus facilement possible. Ceci requiert donc une grande lisibilit‚ et claret‚ du code source. D'o— le choix de la Programmation Orient‚e Objet (POO). De plus,3DEngine doit pouvoir permettre l'utilisation de nombreux mode d'affichage pour les objets, donc de lissages, texturages, ... le plus nombreux possible,d'o— la necessit‚ "d'entretient" du code. Structure POO ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Cette POO se pr‚sente de la maniŠre suivante : - un objet principal, destin‚ … la gestion g‚n‚ral du monde virtuel g‚r‚ par 3DEngine : l'objet TWORLD. - un objet secondaire, destin‚ … g‚rer les vues du monde 3D des objets TWORLD. Cet objet est en fait scind‚ en deux objets distincts : þ l'objet TCAMERA, destin‚ … g‚rer les vues de cam‚ra en mouvement (pas de Z_BUFFER) þ l'objet TFIXEDVIEW, destin‚ … g‚rer les vues fixes des mondes (repŠre fix‚, gestion de Z_BUFFER) ces objets sont ind‚pendant du premier,car ils peuvent servir … plusieurs mondes en mˆme temps... - un objet TLIST destin‚ … faire la liste des objets d‚clar‚s dans un monde - un objet TPATH destin‚ … l'animation des objets - enfin, un objet T3DObject, en fait un RECORD, car les objets n'ont pas … s'auto-g‚rer, car ils le sont par l'objet TWORLD qui se sert des informations contenues par ce RECORD pour effectuer toutes le op‚rations necessaire. De plus, il est important de signaler que les donn‚es 3D des objets ne sont EN AUCUN CAS modifi‚es par une fonction. Ainsi, les donn‚es ‚tant toujours invariables et donc s–res, nous pouvons nous permettre de dupliquer un objet en donnant l'adresse de ses points … un autre objet, qui alors prends l'apparence de celui-ci. Ceci permet de r‚aliser des gains de m‚moire non n‚gligeables, et sans de vitesse pour le moteur 3D. Fonctions Utilitaires 3DEngine doit mettre … disposition de l'utilisateur de nombreuses fonctions utilitaires pour ˆtre … mˆme de r‚aliser tous les effets voulus. Parmis ces fonctions se trouvent : - DuplicateObj : Cr‚e un double d'un objet, poss‚dant les mˆmes caract‚ristiques, les mˆmes buffers pour les points, les faces,... mais b‚n‚ficiant d'une gestion propre des translations, rotations,... - TranslateObj : Effectue une translation XYZ sur un objet - RotateObj : Effectue une rotation XYZ sur un objet - ScaleObj : Effectue un Scale XYZ sur un objet - TranslateUni : Effectue une translation, utilisant les mˆmes valeurs pour X, Y, et Z sur un objet - RotateUni : Effectue une rotation avec les mˆmes valeurs pour X, Y, et Z sur un objet - ScaleUni : Effectue un Scale avec les mˆmes valeurs pour X, Y, et Z sur un objet (scale uniforme) Description des objets Les descriptions suivantes ont pour but d'expliquer le contenu de chaque objet disponible dans 3DEngine et leur fonctionnement. L'objet 3DObject Cet objet est la base mˆme de ce moteur 3D. En effet, il contient toutes les informations se rapportant … un objet, aussi bien les coordonn‚es de ses points que les buffers necessaires ou le type de mapping … appliquer … cet objet. Ainsi, il contient toutes les informations necessaires … sa gestion dans un monde en 3D, mais aussi dans le monde 2D! Les informations de 3DObject sont : - X,Y,Z : LongInt avec les valeurs de translation - RX,RY,RZ : Integer avec les valeurs de rotation - Points : Pointeur sur les coordonn‚es 3D de l'objet (COORDONNEES NON TRANSFORMEES!) Format : [X,Y,Z,X,Y,Z,...] avec X, Y, et Z en LongInt (32Bits) - Faces : Pointeur sur les num‚ro des points des faces de l'objet Format : [A,B,C,A,B,C,...] avec A, B, et C en Word (16Bits) Les faces ne contiennent que 3 POINTS!!! - Col : Pointeur sur les informations de couleur de chaque point Format : [A,A,A,...] avec A en LongInt - ZList : Pointeur sur les valeurs moyennes Z des faces de l'objet pour le tri en vue fixe Format : [Z,Z,Z,...] avec Z en LongInt - TransPoints : Pointeur sur les coordonn‚es 3D des points de l'objet TRANSFORMES! Format : Voir "Points" - Points2D : Pointeur sur un buffer de projection pour les valeurs 2D des points de l'objet Format : [X,Y,X,Y,...] avec X et Y en Word - MappingType : Word contenant le type de mapping pour l'objet ainsi que ses attributs (cf "Algos Utilis‚s") - NbFaces : Word contenant le nombre de faces - NbPoints : Word contenant le nombre de points Fichiers ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Un moteur 3D necessite l'impl‚mentation d'un format de fichier pour stocker les donn‚es des objets et autres. Le format de fichier retenu pour 3DEngine est le 3DT (3D Dad'n'TuO). Ce format offre en effet plusieurs avantages non n‚gligeables : - il est en binaire, ce qui cr‚e un gain de place ‚norme et un vitesse de lecture accrue - il a ‚t‚ cr‚‚ par le SkyTecH GrOuP, donc les droits lui sont acquis - sa structure lui permet une grande facilit‚ d'adaptation et d'am‚lioration Pour plus d'informations sur le format 3DT, reportez vous … la section "Format 3DT". Pour une plus grande souplesse d'utilisation, 3DEngine doit donc se munir d'outils de conversion de formats divers vers le 3DT. Plus le nombre de convertisseur sera ‚lev‚, plus la facilit‚ de cr‚ation des mondes 3D sera accrue. Bien entendue, un convertisseur DOIT fonctionner dans les deux sens.Les formats suivant doivent disposer de leur convertisseur : - DXF : Format de fichier universel - 3DS : Format de fichier 3DStudio, bon modeleur Les calculs vectoriels ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Les nombres en virgule fixe Il existe deux types de calculs en virgule fixe que 3DEngine doit effectuer : les calculs internes (fonctions triangle,...) et les calculs g‚n‚raux. Pour des raisons d'optimisation, les calculs en virgule fixe internes sont execut‚s en 16.16 bits, car ceci offre plusieurs avantages: non seulement ils offrent une grande pr‚cision mais en plus il sont les plus rapides … g‚rer en interne sans avoir … recourir … une unit‚ sp‚cialis‚e. Par contre, les calculs g‚n‚raux en virgule fixe doivent passer par un module sp‚cialis‚e dans les calculs virgule fixe. Pour la valeur de division, il faut compter 9bits (512) pour avoir une pr‚cision suffisante sans pour autant r‚clamer trop de m‚moire. Les calculs vectoriels Ces calculs peuvent passer par le module de virgule fixe pour les calculs ayant besoin de pr‚cision. Le module MATH Ce module doit regrouper toutes les fonctions de calcul(vectoriel et fixe) pour pouvoir ˆtre … la disposition de toutes les fonctions pouvant en avoir besoin. Ce module doit evidemment ˆtre ‚crit en ASSEMBLEUR pour un gain de vitesse substantielle lors de calculs 3D. La 3D ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Les algorythmes utilis‚s Le but de 3DEngine ‚tant d'ˆtre le plus complet possible tout en ˆtant aussi le plus rapide. Pour cela, un grand nombre de lissages, de m‚thodes de mapping de texture ou autre doit ˆtre impl‚ment‚. De plus, un grand nombre de ces fonctions se pr‚sentent en double ou en triple, mais en fait avec des versions diff‚rentes les unes des autres : certaines sont plus rapides que d'autres,ces derniŠres ‚tant alors plus juste du point de vue du calcul 3D. Ceci permet donc "d'optimiser" l'affichage d'un monde 3D: les objets peu ou pas d‚taill‚s ne necessitant pas un lissage parfait seront alors plus rapides … afficher, entrainant donc une acceleration g‚n‚rale du monde 3D. Toutefois, l'appr‚ciation est laiss‚e aux d‚veloppeurs, car il n'est pas possible d'imposer une m‚thode pour un objet. Voici donc la liste des lissages et texture mapping pr‚vus : - INVISIBLE (Tout simplement ignor‚) - DOTS (Les points affich‚s) - Z_DOTS (Les points affich‚s, couleurs suivant Z) - WIRE (En Wireframe - Fil de fer) - FLAT (Face pleine;Gestion de l'illumination) - GOURAUD (M‚thode de Gouraud d'interpolation lin‚aire) - Z_GOURAUD (M‚thode de Gouraud en fonction de Z) - PHONG (M‚thode de Phong d'interpolation lin‚aire) - TEXTMAP (M‚thode de mapping 2D sur une surface) - TEXTMAP3D (M‚thode de mapping 3D sur une surface) - GOURAUD MAPPING (Mapping de texture 2D avec Gouraud) - Z_GOURAUD MAPPING (Mapping de texture 2D avec Z_GOURAUD) - PHONG MAPPING (Mapping de texture 2D avec Phong) - GOURAUD MAPPING 3D (Mapping de texture 3D avec Gouraud) - Z_GOURAUD MAPPING 3D (Mapping de texture 3D avec Z_GOURAUD) - PHONG MAPPING 3D (Mapping de texture 3D avec Phong) - ENVIRONNEMENT MAPPING (Mapping d'environement) De plus, plusieurs attributs se rajouteront … ces fonctions, certains ‚tant cumulables, d'autres non... - Z_BUFFER (Gestion d'un Z_BUFFER) - TRANSPARENT (Gestion de la transparence) - INVISIBLE (L'objet n'est pas trac‚; Cet attribut fait double usage avec le mode INVISIBLE, mais il permet de faire disparaitre des objets sans perdre leur type de mapping) Le tri des faces Le tri des faces ‚tant un point important d'un moteur 3D, car il d‚termine sa vitesse par sa qualit‚ et sa rapidit‚, il m‚rite une ‚tude approfondie du sujet. Toutefois,le but de cette documentation n'est pas de fournir un catalogue d'algorythmes, mais une solution pour la cr‚ation d'un moteur 3D. Voici donc la description de l'algorythme utilis‚, avec toute la justification pour son choix. [...] Animations ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ KeyFrame 3DEngine se veut aussi un puissant module d'animation temps r‚el des objets 3D. Ceci veut dire que les possibilit‚s d'animation doivent ˆtre simple d'utilisation, tout en offrant de trŠs grandes possiblit‚s. Pour cela, 3DEngine doit ˆtre dot‚ d'un systŠme de "KeyFrame" qui permet une gestion pouss‚e des mouvements d'un objet dans un monde 3D, et ce par l'intermediaire des transformations usuelles. Toutefois,3DEngine se voit pour le moment r‚duit aux translations et aux rotations.